package com.ruoyi.roomDetail.domain;

import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 客房订单详情信息对象 wdm_order_room_detail
 *
 * @author ruoyi
 * @date 2025-09-21
 */
public class OrderRoomDetail extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 房型ID */
    @Excel(name = "房型ID")
    private Long roomTypeId;

    /** 房型名称（快照） */
    @Excel(name = "房型名称", readConverterExp = "快=照")
    private String roomTypeName;

    /** 房型主图（快照） */
    @Excel(name = "房型主图", readConverterExp = "快=照")
    private String mainImage;

    /** 下单时房型单价（快照） */
    @Excel(name = "下单时房型单价", readConverterExp = "快=照")
    private BigDecimal unitPrice;

    /** 预订间数 */
    @Excel(name = "预订间数")
    private Long quantity;

    /** 子项金额（unit_price × quantity） */
    @Excel(name = "子项金额", readConverterExp = "u=nit_price,×=,q=uantity")
    private BigDecimal subtotal;

    /** 入住日期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "入住日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date checkinDate;

    /** 退房日期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "退房日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date checkoutDate;

    /** 入住人数 */
    @Excel(name = "入住人数")
    private Long occupancy;

    /** 实际分配房间号 */
    @Excel(name = "实际分配房间号")
    private String roomNo;

    /** 状态（0正常 1禁用） */
    @Excel(name = "状态", readConverterExp = "0=正常,1=禁用")
    private String status;

    /** 删除标志（0存在 2删除） */
    private String delFlag;

    /** 版本号（乐观锁） */
    private Long version;

    /** 房型配置快照 */
    @Excel(name = "房型配置快照")
    private String roomTypeConfig;

    /** 房间ID（入住时分配） */
    @Excel(name = "房间ID", readConverterExp = "入=住时分配")
    private Long roomId;

    /** 入住天数 */
    @Excel(name = "入住天数")
    private Long nights;

    /** 杂项金额（加床费等） */
    @Excel(name = "杂项金额", readConverterExp = "加=床费等")
    private BigDecimal extraAmount;

    /** 订单总金额 = subtotal + extra_amount */
    @Excel(name = "订单总金额 = subtotal + extra_amount")
    private BigDecimal totalAmount;

    /** 成人数 */
    @Excel(name = "成人数")
    private Long adults;

    /** 儿童数 */
    @Excel(name = "儿童数")
    private Long children;

    /** 订单状态：
     0=待确认 1=已确认 2=已入住 3=已完成 4=已取消 5=已退款
     */
    @Excel(name = "订单状态：0=待确认 1=已确认 2=已入住 3=已完成 4=已取消 5=已退款")
    private String orderStatus;

    /** 订单ID */
    @Excel(name = "订单ID")
    private Long orderId;

    /** 订单编号 */
    @Excel(name = "订单编号")
    private String orderCode;

    public void setRoomTypeId(Long roomTypeId)
    {
        this.roomTypeId = roomTypeId;
    }

    public Long getRoomTypeId()
    {
        return roomTypeId;
    }

    public void setRoomTypeName(String roomTypeName)
    {
        this.roomTypeName = roomTypeName;
    }

    public String getRoomTypeName()
    {
        return roomTypeName;
    }

    public void setMainImage(String mainImage)
    {
        this.mainImage = mainImage;
    }

    public String getMainImage()
    {
        return mainImage;
    }

    public void setUnitPrice(BigDecimal unitPrice)
    {
        this.unitPrice = unitPrice;
    }

    public BigDecimal getUnitPrice()
    {
        return unitPrice;
    }

    public void setQuantity(Long quantity)
    {
        this.quantity = quantity;
    }

    public Long getQuantity()
    {
        return quantity;
    }

    public void setSubtotal(BigDecimal subtotal)
    {
        this.subtotal = subtotal;
    }

    public BigDecimal getSubtotal()
    {
        return subtotal;
    }

    public void setCheckinDate(Date checkinDate)
    {
        this.checkinDate = checkinDate;
    }

    public Date getCheckinDate()
    {
        return checkinDate;
    }

    public void setCheckoutDate(Date checkoutDate)
    {
        this.checkoutDate = checkoutDate;
    }

    public Date getCheckoutDate()
    {
        return checkoutDate;
    }

    public void setOccupancy(Long occupancy)
    {
        this.occupancy = occupancy;
    }

    public Long getOccupancy()
    {
        return occupancy;
    }

    public void setRoomNo(String roomNo)
    {
        this.roomNo = roomNo;
    }

    public String getRoomNo()
    {
        return roomNo;
    }

    public void setStatus(String status)
    {
        this.status = status;
    }

    public String getStatus()
    {
        return status;
    }

    public void setDelFlag(String delFlag)
    {
        this.delFlag = delFlag;
    }

    public String getDelFlag()
    {
        return delFlag;
    }

    public void setVersion(Long version)
    {
        this.version = version;
    }

    public Long getVersion()
    {
        return version;
    }

    public void setRoomTypeConfig(String roomTypeConfig)
    {
        this.roomTypeConfig = roomTypeConfig;
    }

    public String getRoomTypeConfig()
    {
        return roomTypeConfig;
    }

    public void setRoomId(Long roomId)
    {
        this.roomId = roomId;
    }

    public Long getRoomId()
    {
        return roomId;
    }

    public void setNights(Long nights)
    {
        this.nights = nights;
    }

    public Long getNights()
    {
        return nights;
    }

    public void setExtraAmount(BigDecimal extraAmount)
    {
        this.extraAmount = extraAmount;
    }

    public BigDecimal getExtraAmount()
    {
        return extraAmount;
    }

    public void setTotalAmount(BigDecimal totalAmount)
    {
        this.totalAmount = totalAmount;
    }

    public BigDecimal getTotalAmount()
    {
        return totalAmount;
    }

    public void setAdults(Long adults)
    {
        this.adults = adults;
    }

    public Long getAdults()
    {
        return adults;
    }

    public void setChildren(Long children)
    {
        this.children = children;
    }

    public Long getChildren()
    {
        return children;
    }

    public void setOrderStatus(String orderStatus)
    {
        this.orderStatus = orderStatus;
    }

    public String getOrderStatus()
    {
        return orderStatus;
    }

    public void setOrderId(Long orderId)
    {
        this.orderId = orderId;
    }

    public Long getOrderId()
    {
        return orderId;
    }

    public void setOrderCode(String orderCode)
    {
        this.orderCode = orderCode;
    }

    public String getOrderCode()
    {
        return orderCode;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
                .append("roomTypeId", getRoomTypeId())
                .append("roomTypeName", getRoomTypeName())
                .append("mainImage", getMainImage())
                .append("unitPrice", getUnitPrice())
                .append("quantity", getQuantity())
                .append("subtotal", getSubtotal())
                .append("checkinDate", getCheckinDate())
                .append("checkoutDate", getCheckoutDate())
                .append("occupancy", getOccupancy())
                .append("roomNo", getRoomNo())
                .append("status", getStatus())
                .append("delFlag", getDelFlag())
                .append("version", getVersion())
                .append("createTime", getCreateTime())
                .append("updateTime", getUpdateTime())
                .append("createBy", getCreateBy())
                .append("updateBy", getUpdateBy())
                .append("remark", getRemark())
                .append("roomTypeConfig", getRoomTypeConfig())
                .append("roomId", getRoomId())
                .append("nights", getNights())
                .append("extraAmount", getExtraAmount())
                .append("totalAmount", getTotalAmount())
                .append("adults", getAdults())
                .append("children", getChildren())
                .append("orderStatus", getOrderStatus())
                .append("orderId", getOrderId())
                .append("orderCode", getOrderCode())
                .toString();
    }
}
